﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using condortravel.operaciones.business.operaciones;

using System.Collections.Generic;
using condortravel.operaciones.core.DataModel;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.common.Log;
using condortravel.operaciones.error.Operaciones;
using condortravel.operaciones.common;

namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCProgramaciones : ControlBase
    {

        #region Eventos controles
        public override event ControlBase.EventOnErrorControl ErrorControl;
        public override event ControlBase.EventOnMessageControl MessageControl;
        public delegate void EventSelectProgramacion_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventSelectProgramacion_Click SelectProgramacion_Click;
        public delegate void EventNuevoEvento_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventNuevoEvento_Click NuevoEvento_Click;

        public delegate void EventVerBitacora_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventVerBitacora_Click VerBitacora_Click;

        #endregion

        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }
        #endregion

        
        public int CodigoItinerario
        {
            get { return int.Parse(hCodigoItinerario.Value); }
            set { hCodigoItinerario.Value = value.ToString(); }
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargaDatosIniciales();
            }
        }

        private void cargaDatosIniciales()
        {
           
            Util.LoadDropDownList(cboAgencia, Estaticas.getListAgencia(), "descripcion", "Agencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboAgente, Estaticas.getListAgente(), "nombre", "Agente_ID", true, "0", "-");
            Util.LoadDropDownList(cboEstadoItinerario, Estaticas.getListEstadoItinerario(), "descripcion", "estadoItinerario_ID", true, "0", "-");
            //Carga datos x defecto
            if (this.User != null)
                Util.SelectItemDropDownList(cboAgente, this.User.UserID.ToString());

            //Seleccionar el estado x defecto
            Util.SelectItemDropDownList(cboEstadoItinerario, AppStatic.VAR_OPE_ESTADO_EJECUCION.ToString());

            //Para validar el ingreso de algun criterio
            //cmdBuscar.Attributes.Add("onclick", String.Format("if(!FF_checkFieldsEmpty()) return false;"));
        }
        protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void gvList_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "nuevoEvento")
            {
                try
                {
                    if (cboEstadoItinerario.SelectedValue.Equals(AppStatic.VAR_OPE_EStADO_ITINERARIO_FINALIZADO.ToString()))
                        throw new condortravel.operaciones.error.Operaciones.OperacionesException.NoCrearEventoEstadoFinalizadoOPException();

                    NuevoEvento_Click(sender, e);
                }
                catch (Exception exc)
                {
                    ErrorControl(gvList, exc);
                }
            }
            if (e.CommandName == "verBitacora")
            {
                VerBitacora_Click(sender, e);
            }

        }
        /// <summary>
        /// Por cada fila entra a este metodo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Tb_ServiciosProgramado servicio = (Tb_ServiciosProgramado)e.Row.DataItem;
                Label lblServcio = (Label)e.Row.FindControl("lblServcio");
                Label lblEstado = (Label)e.Row.FindControl("lblEstado");
                lblEstado.Text = (servicio.Tb_Estado_Programacion != null) ? servicio.Tb_Estado_Programacion.descripcion: " - ";
                lblServcio.Text = (servicio.Tb_DetalleReserva != null && servicio.Tb_DetalleReserva.Tb_TipoReserva != null) ? servicio.Tb_DetalleReserva.Tb_TipoReserva.descripcion : " - ";
                
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public void mostrarItinerario()
        {
            //Muestra informacion de itinerario
            Tb_ItinerarioViajero itinerario = operacionesServices.getItinerarioByCodigo(CodigoItinerario);
            txtCodigo.Text = itinerario.itinerarioViajero_ID.ToString();
            Util.SelectItemDropDownList(cboAgencia, itinerario.agencia_ID.ToString());
            Util.SelectItemDropDownList(cboAgente, itinerario.agente_ID.ToString());
            Util.SelectItemDropDownList(cboEstadoItinerario, itinerario.estadoItinerario_ID.ToString());
            txtFechaInicio.Text = itinerario.fechaInicio.ToShortDateString();
            txtFechaTermino.Text = itinerario.fechaTermino.ToShortDateString();
            //muestra informacion de los servicios programados
            gvList.DataSource = operacionesServices.getListProgramaciones(CodigoItinerario);
            gvList.DataBind();

        }

        /// <summary>
        /// 
        /// </summary>
        private void mostrarServicios()
        { 
        
        }

        protected void cmdActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                Tb_ItinerarioViajero itinerario = new Tb_ItinerarioViajero();
                itinerario.itinerarioViajero_ID = CodigoItinerario;
                itinerario.agente_ID = int.Parse(cboAgente.SelectedValue);
                itinerario.agencia_ID = int.Parse(cboAgencia.SelectedValue);
                itinerario.estadoItinerario_ID = int.Parse(cboEstadoItinerario.SelectedValue);
                operacionesServices.updateItinerario(itinerario);
                this.MessageControl("Los datos han sido actualizados correctamente");
            }
            catch (Exception exc)
            {
                ErrorControl(cmdActualizar, exc);
            }
        }
        
    }
}